// DataLibrary FunctionPlugin - General

// 識別子：DL
// 内容  ：DataLibrary汎用関数。

//----------------------------------------------------------------------------//
// Plugin
//----------------------------------------------------------------------------//

//-- プラグインの読み込み処理 --//
//DL_LoadFunction_General:
//Return


//-- プラグインの終了処理 --//
//DL_UnloadFunction_General:
//Return


//----------------------------------------------------------------------------//
// General
//----------------------------------------------------------------------------//

//-- ErrorMes(mes) : エラーメッセージを表示する --//
DL_ErrorMes:
	Confirm DL_ReplaceCRLF(Args(1))
Return


//-- SwapVariable var1 var2 : 変数が存在する場合のみvar1とvar2を入れ替える --//
DL_SwapVariable:
	If Eval("IsVarDefined(" & Args(1) & ")") And Eval("IsVarDefined(" & Args(2) & ")") Then
		Local value = Eval(Args(1))
		Eval(Args(1)) = Eval(Args(2))
		Eval(Args(2)) = value
	EndIf
Return


//----------------------------------------------------------------------------//
// String
//----------------------------------------------------------------------------//

//-- ReplaceCRLF(string) : 改行記号;を改行文字に置換する --//
DL_ReplaceCRLF:
Return Replace(Args(1), ";", Chr(13) & Chr(10))


//-- CutString(string, width[, mark]) : 文字列を指定幅だけ返す --/
DL_CutString:
	Local str = Args(1)
	Local width = Args(2)
	Local mark = Args(3)
	If TextWidth(str) <= width Then
		Return str
	EndIf
	Do While (TextWidth(str & mark) > width)
		str = Left(str , Len(str) - 1)
	Loop
Return (str & mark)


//-- SCX(string, width) : 文字列を中央表示した場合のX座標を返す --//
DL_SCX:
Return ((Args(2) - TextWidth(Args(1))) \ 2)


//-- SCY(string, width) : 文字列を中央表示した場合のY座標を返す --//
DL_SCY:
Return ((Args(2) - TextHeight(Args(1))) \ 2)


//----------------------------------------------------------------------------//
// FileRead
//----------------------------------------------------------------------------//

//-- LineRead(handle, option) : 行を読み込む --//
DL_LineRead:
	Local read_data
	LineRead Args(1) read_data
	If RegExp(read_data, "^\s*(#|//)") != "" Then
		Return Args(2)  // コメントのみの行は引数2で指定されたものを返す
//	ElseIf InStr(read_data, "//") > 0 Then
//		Return RegExpReplace(read_data, "^\s*(.+?)\s*//.*", "$1")  // 途中からのコメントを取り除く
	EndIf
Return RegExpReplace(read_data, "^\s*(.+?)\s*", "$1")  // 左右の半角スペース、タブスペースを取り除く


//-- ConvertListData(string, mark) : 記号で区切られたデータをリストデータに変換する --//
DL_ConvertListData:
Return ("(" & RegExpReplace(Args(1), "\s*" & Args(2) & "\s*", ") (") & ")")


//-- IsSectionLine(string) : セクション行なら1を返す --//
DL_IsSectionLine:
Return (RegExp(Args(1), "^\s*\[(.+)\]\s*$") != "")


//-- IsCommentLine(string) : コメント行なら1を返す --//
DL_IsCommentLine:
Return (RegExp(Args(1), "^\s*(#|//)") != "")


//----------------------------------------------------------------------------//
// File
//----------------------------------------------------------------------------//

//-- IsPictureFile(file) : 画像ファイルなら1を、そうでないなら0を返す --//
DL_IsPictureFile:
Return (RegExp(Args(1), ".+\.(bmp|gif|jpg|jpeg|png)$", "大小区別なし") != "")


//-- IsSoundFile(file) : 音楽ファイルなら1を、そうでないなら0を返す --//
DL_IsSoundFile:
Return (RegExp(Args(1), ".+\.(wav|mp3|mid)$", "大小区別なし") != "")


//-- GetPictureFile(name) : 変数、データ名称から画像ファイル名を取り出す --//
DL_GetPictureFile:
	Local name = Eval(Args(1))
	If DL_IsPictureFile(name) Then
		Return name
	ElseIf Info("パイロット", name, "グラフィック") != "" Then
		Return ("Pilot\" & Info("パイロット", name, "グラフィック"))
	ElseIf Info("パイロットデータ", name, "グラフィック") != "" Then
		Return ("Pilot\" & Info("パイロットデータ", name, "グラフィック"))
	ElseIf Info("ユニット", name, "グラフィック") != "" Then
		Return ("Unit\" & Info("ユニット", name, "グラフィック"))
	ElseIf Info("ユニットデータ", name, "グラフィック") != "" Then
		Return ("Unit\" & Info("ユニットデータ", name, "グラフィック"))
	ElseIf Info("非戦闘員", name, "グラフィック") != "" Then
		Return ("Pilot\" & Info("非戦闘員", name, "グラフィック"))
	EndIf
Return "-.bmp"


//-- GetBGMFile(name) : 変数、データ名称からBGMファイル名を取り出す --//
DL_GetBGMFile:
	Local name = Eval(Args(1))
	If DL_IsSoundFile(name) Then
		Return name
	ElseIf Info("パイロット", name, "ＭＩＤＩ") != "" Then
		Return Info("パイロット", name, "グラフィック")
	ElseIf Info("ユニット", name, "ＭＩＤＩ") != "" Then
		Return Info("ユニット", name, "ＭＩＤＩ")
	ElseIf Info("パイロットデータ", name, "ＭＩＤＩ") != "" Then
		Return Info("パイロットデータ", name, "ＭＩＤＩ")
	ElseIf Info("ユニットデータ", name, "ＭＩＤＩ") != "" Then
		Return Info("ユニットデータ", name, "ＭＩＤＩ")
	EndIf
Return "-.mid"


//-- SearchFile(file, folder) : ファイルを指定したフォルダ内で検索する --//
DL_SearchFile:
	Local file = Args(1)
	Local stack_cnt = 1
	Local stack_path path folder
	stack_path[1] = Args(2)
	
	// パスの末尾に区切り文字がない場合は追加する
	If (Not Right(stack_path[1], 1) Like "[\/]") And (stack_path[1] != "") Then
		stack_path[1] = stack_path[1] & "\"
	EndIf
	
	// ファイルを検索する
	Do While (stack_cnt > 0)
		path = stack_path[stack_cnt]
		If Dir(path & file, "ファイル") != "" Then
			Return (path & file)  // ファイルを発見した場合は終了する
		EndIf
		Incr stack_cnt -1
		
		// 同階層にあるフォルダをスタックに積む
		folder = Dir(path & "*", "フォルダ")
		Do While (folder != "")
			Incr stack_cnt 1
			stack_path[stack_cnt] = path & folder & "\"
			folder = Dir()
		Loop
	Loop
Return ""


//----------------------------------------------------------------------------//
// Etc
//----------------------------------------------------------------------------//

//-- IsColorRGB(rgb) : RGB16進数なら1を、そうでないなら0を返す --//
DL_IsColorRGB:
Return (RegExp(Args(1), "^#[0-9a-f]{6}$", "大小区別なし") != "")


